#ifndef BACKGROUND_TASK_H
#define BACKGROUND_TASK_H

#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <mutex>
#include <list>
#include <condition_variable>
#include <atomic>

// 后台任务类：用于处理异步任务
class BackgroundTask {
public:
    // 构造函数：初始化后台任务，默认栈大小为8KB
    BackgroundTask(uint32_t stack_size = 4096 * 2);
    // 析构函数：清理资源
    ~BackgroundTask();

    // 调度一个任务到后台执行
    void Schedule(std::function<void()> callback);
    // 等待所有任务完成
    void WaitForCompletion();

private:
    std::mutex mutex_;                              // 互斥锁，保护任务列表
    std::list<std::function<void()>> main_tasks_;   // 任务列表
    std::condition_variable condition_variable_;     // 条件变量，用于任务同步
    TaskHandle_t background_task_handle_ = nullptr; // 后台任务句柄
    std::atomic<size_t> active_tasks_{0};           // 活动任务计数

    // 后台任务循环函数
    void BackgroundTaskLoop();
};

#endif
